package com.example.parent.bookmanage_mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

/**
 * 电子书实体类（基于MyBatis-Plus）
 * 与数据库中的book表映射，使用MyBatis-Plus注解配置实体与表的映射关系
 */
@TableName("book") // 指定对应的数据库表名，此处映射到book表
public class EBook {

    /**
     * 电子书唯一标识ID
     * 使用MyBatis-Plus的注解配置主键策略为自增
     */
    @TableId(type = IdType.AUTO) // 主键注解，type=IdType.AUTO表示使用数据库自增策略
    private Integer id;

    /**
     * 电子书名称
     * 与数据库表中name字段映射（属性名与字段名一致时可省略@TableField注解）
     */
    private String name;

    /**
     * 电子书作者
     */
    private String author;

    /**
     * 出版社名称
     */
    private String publisher;

    /**
     * 电子书状态
     * 可表示为"可阅读"、"已下架"等状态标识
     */
    private String status;

    /**
     * 无参构造方法
     * MyBatis-Plus在映射查询结果时需要无参构造方法
     */
    public EBook() {
    }

    /**
     * 全参构造方法
     * 用于创建包含所有属性的EBook对象
     *
     * @param id        电子书ID
     * @param name      电子书名称
     * @param author    作者
     * @param publisher 出版社
     * @param status    状态
     */
    public EBook(Integer id, String name, String author, String publisher, String status) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.publisher = publisher;
        this.status = status;
    }

    /**
     * 重写toString方法
     * 用于对象的字符串表示，方便日志输出和调试
     *
     * @return 包含电子书所有属性的字符串
     */
    @Override
    public String toString() {
        return "EBook{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", publisher='" + publisher + '\'' +
                ", status='" + status + '\'' +
                '}';
    }

    // 以下为各属性的getter和setter方法

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}